import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
import { Toast } from 'vant';
import { loginAPI, userInfoAPI } from '@/api/user.js';
import { saveToken, loadToken, delToken } from '@/utils/token.js';
export default new Vuex.Store({
	state: {
		tokenObj: loadToken() || {},
		userInfoObj: {},
	},
	mutations: {
		changeToken(state, obj) {
			state.tokenObj = obj;
			saveToken(obj);
		},
		signOut(state) {
			state.tokenObj = {};
			delToken();
		},
		// 将通过接口获取的数据存储到vuex中，方便各个组件使用
		setUserInfo(state, obj) {
			state.userInfoObj = obj;
		},
	},
	actions: {
		async login(context, info) {
			try {
				const res = await loginAPI(info);
				context.commit('changeToken', res.data);
				Toast.success('登录成功');
				return true;
				// alert("登录成功");
			} catch {
				// alert("验证码错误！");
				Toast.fail('验证码错误');
				return false;
			}
		},
		// 调用接口，获取用户信息
		async getUserInfo(context) {
			// 路由跳转不会刷新vuex，但是会重新发请求
			// 因此判定是否要重新发请求
			// vuex没数据才发请求，避免性能浪费
			if (!context.state.userInfoObj.name) {
				const res = await userInfoAPI();
				// console.log(res);
				context.commit('setUserInfo', res.data);
			}
		},
	},
});
